import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import './assets/global.css'
import { updateMockStatus } from './config/appConfig'

// 添加全局修复：防止在非数组对象上调用数组方法时抛出TypeError
// 注意：这是一个针对当前问题的临时解决方案
const safeArrayMethods = ['filter', 'find', 'map', 'forEach', 'reduce', 'some', 'every', 'findIndex'];

safeArrayMethods.forEach(methodName => {
  Object.defineProperty(Object.prototype, methodName, {
    value: function() {
      // 检查this是否为数组
      if (Array.isArray(this)) {
        return Array.prototype[methodName].apply(this, arguments);
      }
      
      // 对于不同的方法返回合适的默认值
      switch(methodName) {
        case 'filter':
        case 'map':
        case 'forEach':
          return [];
        case 'find':
        case 'findIndex':
          return methodName === 'findIndex' ? -1 : undefined;
        case 'reduce':
          // 如果有初始值，则返回初始值
          return arguments.length > 1 ? arguments[0] : undefined;
        case 'some':
          return false;
        case 'every':
          return true;
        default:
          return undefined;
      }
    },
    writable: true,
    configurable: true
  });
});

// 创建Vue应用实例
const app = createApp(App)

// 使用插件
app.use(router)
app.use(ElementPlus)

// 应用挂载前检测后端服务可用性
async function initApp() {
  try {
    // 检测后端服务可用性并更新mock状态
    await updateMockStatus();
    
    // 挂载应用
    app.mount('#app');
  } catch (error) {
    console.error('应用初始化失败:', error);
    // 即使检测失败，仍挂载应用，确保应用可以运行
    app.mount('#app');
  }
}

// 初始化应用
initApp();
